# -*- coding: utf-8 -*-
"""
Created on Mon Jan 20 18:00:28 2025

@author: Terence
"""

from flask import Flask, request, jsonify
from flask_cors import CORS
from predict import get_cat_breed
import os
import logging

# 配置日志
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)

app = Flask(__name__)
CORS(app)  # 启用 CORS，允许跨域请求

# 添加模型文件检查
model_path = os.path.join(os.path.dirname(__file__), "model.pt")
logger.debug(f"模型文件路径: {model_path}")
logger.debug(f"模型文件是否存在: {os.path.exists(model_path)}")

def allowed_file(filename):
    return '.' in filename and filename.rsplit('.', 1)[1].lower() in {'jpg', 'jpeg', 'png'}

@app.route('/predictBreed', methods=['POST'])
def predictBreed():
    try:
        logger.debug("收到预测请求")
        logger.debug(f"请求文件: {request.files}")
        
        if 'file' not in request.files:
            logger.error("请求中没有文件")
            return jsonify({"error": "No file part"}), 400

        file = request.files['file']
        logger.debug(f"文件名: {file.filename}")

        if file.filename == '':
            logger.error("没有选择文件")
            return jsonify({"error": "No selected file"}), 400

        if allowed_file(file.filename):
            logger.debug("文件格式验证通过")
            img_bytes = file.read()
            logger.debug(f"读取到的图片大小: {len(img_bytes)} bytes")
            
            try:
                logger.debug("开始进行预测")
                prediction_name = get_cat_breed(img_bytes)
                logger.debug(f"预测结果: {prediction_name}")
                return jsonify({
                    'message': 'File successfully uploaded and processed',
                    'prediction': prediction_name
                }), 200
            except Exception as e:
                logger.error(f"预测过程发生错误: {str(e)}")
                return jsonify({"error": str(e)}), 500
        else:
            logger.error(f"不支持的文件类型: {file.filename}")
            return jsonify({"error": "Unsupported file type"}), 400

    except Exception as e:
        logger.error(f"处理请求时发生错误: {str(e)}")
        return jsonify({"error": str(e)}), 500

if __name__ == '__main__':
    # 开启调试模式
    app.config['DEBUG'] = True
    logger.debug("启动 Flask 应用")
    # 如果在开发环境中，使用 Flask 自带的服务器
    if os.getenv('FLASK_ENV') == 'development':
        app.run(host='localhost', port=5000)
    else:
        # 在生产环境中，通过 gunicorn 启动 Flask
        app.run(host='0.0.0.0', port=5000)  # 这里可以选择其他端口

